<?php

class ml_tool_fetch
{

    /**
     * @develop_template
     * curl选项设置（ 替换curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true); ）
     */
    private function curl_redir_exec($ch,$debug="")
    {
        static $curl_loops = 0;
        static $curl_max_loops = 20;

        if ($curl_loops++ >= $curl_max_loops)
        {
            $curl_loops = 0;
            return FALSE;
        }
        curl_setopt($ch, CURLOPT_HEADER, true);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $data = curl_exec($ch);
        $debbbb = $data;
        list($header, $data) = explode("\n\n", $data, 2);
        $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

        if ($http_code == 301 || $http_code == 302) {
            $matches = array();
            preg_match('/Location:(.*?)\n/', $header, $matches);
            $url = @parse_url(trim(array_pop($matches)));
            //print_r($url);
            if (!$url)
            {
                $curl_loops = 0;
                return $data;
            }
            $last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL));

            $new_url = $url['scheme'] . '://' . $url['host'] . $url['path'] . ($url['query']?'?'.$url['query']:'');
            curl_setopt($ch, CURLOPT_URL, $new_url);

            //    debug('Redirecting to', $new_url);

            return self::curl_redir_exec($ch);
        } else {
            $curl_loops=0;
            return $debbbb;
        }
    }


    //抓取整个页面
    static  public function get_page($url)
    {
        try{
            $ch = curl_init();

            curl_setopt($ch,CURLOPT_URL,$url);
            curl_setopt($ch,CURLOPT_HEADER,0);
            //    curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);
            self::curl_redir_exec($ch);
            //    curl_setopt($ch,CURLOPT_REFERER,true);
            curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
            curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)");
            $info['content'] = curl_exec($ch);
            $info['info']=curl_getinfo($ch);
            curl_close($ch);
            return $info;
        }catch(Exception $e){
            return false;
        }
    }


}